

#ifndef UC_GELNSG3D_H
#define UC_GELNSG3D_H

#include "zgeline3d.h"
#include "zgeplane.h"
#pragma pack (push, 8)

class UcGeLineSeg2d;

class 
GE_DLLEXPIMPORT
UcGeLineSeg3d : public UcGeLinearEnt3d
{
public:
    UcGeLineSeg3d();
    UcGeLineSeg3d(const UcGeLineSeg3d& line);
    UcGeLineSeg3d(const UcGePoint3d& pnt, const UcGeVector3d& vec);
    UcGeLineSeg3d(const UcGePoint3d& pnt1, const UcGePoint3d& pnt2);

    void           getBisector  (UcGePlane& plane) const;

    UcGePoint3d    baryComb     (double blendCoeff) const;

    UcGePoint3d    startPoint   () const;
    UcGePoint3d    midPoint     () const;
    UcGePoint3d    endPoint     () const;
    double         length       () const;
    double         length       (double fromParam, double toParam,
                                 double tol = UcGeContext::gTol.equalPoint()) const;

    UcGeLineSeg3d& set          (const UcGePoint3d& pnt, const UcGeVector3d& vec);
    UcGeLineSeg3d& set          (const UcGePoint3d& pnt1, const UcGePoint3d& pnt2);
   	UcGeLineSeg3d& set          (const UcGeCurve3d& curve1,
                                 const UcGeCurve3d& curve2,
                                 double& param1, double& param2,
                                 ZSoft::Boolean& success);
  	UcGeLineSeg3d& set          (const UcGeCurve3d& curve,
                                 const UcGePoint3d& point, double& param,
                                 ZSoft::Boolean& success);

    UcGeLineSeg3d& operator =   (const UcGeLineSeg3d& line);
};

#pragma pack (pop)
#endif
